"""
使用requests做接口测试，发送get请求
1.get请求不带参数
2.get请求带参数
接口测试：下发请求，对结果进行断言
"""

'''
测试环境：url、db、方法在ini配置文件中管理
接口地址：常量，写死在代码中，比如代码中一个常量文件
测试数据：yaml、csv中
'''
import requests

env = "http://192.168.0.103:8088/"  # 测试环境（经常变化的）
# 获取用户列表
url = env + "futureloan/mvc/api/member/list"  # 接口地址（很少变化）
# 发送请求，将响应的结果放到变量r中
r = requests.get(url)
# 打印文本格式的响应
print(r.text)
# 响应如果是json格式的，可以转成json，当做字典处理
print(r.json())
# 对结果进行断言
assert r.json()['status'] == 1
assert r.json()['code'] == '10001'
assert r.json()['msg'] == '获取用户列表成功'

# 注册接口
# 1. 直接拼接到url的后面
url = env + "futureloan/mvc/api/member/register?mobilephone=18012345678&pwd=12345&regname=sdfgh"
r = requests.get(url)
print(r.text)
# 实际结果，也就是接口响应的值
# 预期结果，从接口文档中获取的
# 检查实际结果与预期结果是否一致
assert r.json()['status'] == 0
assert r.json()['code'] == '20108'
assert r.json()['msg'] == '密码长度必须为6~18'

# 2. 使用params传参
url = env + "futureloan/mvc/api/member/register"
cs = {"mobilephone": "18012345678", "pwd": "12345", "regname": "sdfgh"}
r = requests.get(url, params=cs)
print(r.text)
assert r.json()['status'] == 0
assert r.json()['code'] == "20108"
assert r.json()['msg'] == "密码长度必须为6~18"
# ctrl + alt + L 格式化代码

print("*" * 100)  # 分割线
print("r.text=", r.text)  # 文本格式
print("r.json()=", r.json())  # 如果是json格式的，可以转成json来处理
print("r.status_cod=", r.status_code)  # 状态码
print("r.reason=", r.reason)  # 状态原因
print("r.headers=", r.headers)  # 响应头
#  'User-Agent': 'python-requests/2.25.1'  jmeter
print("r.request.headers=", r.request.headers)  # 请求头
print("*" * 100)  # 分割线

# 伪装成浏览器发送的请求，设置User-Agent
# hd = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
#                     "Chrome/90.0.4430.93 Safari/537.36"}
hd = {"User-Agent": "3456789fightback"}
r = requests.get(url, params=cs, headers=hd)
print("r.json()=", r.json())
print("r.request.headers=", r.request.headers)  # 请求头
